<template>
  <div class="icon-body">
    <el-input v-model="inputFilterValue" class="icon-search" clearable placeholder="请输入图标名称">
      <!-- @clear="iconData" @input="iconData" -->
      <i slot="suffix" class="el-icon-search el-input__icon" />
    </el-input>

    <div class="icon-list">
      <div class="list-container">
        <div v-for="(iconName, index) in iconData" :key="index" class="icon-item-wrapper" @click="selectIcon(iconName)">
          <div :class="['icon-item', { active: innerValue === iconName }]">
            <svg-icon :icon-class="iconName" class-name="icon" style="height: 25px;width: 16px;" />
            <span>{{ iconName }}</span>
          </div>
        </div>
      </div>
    </div>
  </div>
</template>

<script>
import allIcons from './requireIcons'
export default {
  name: 'IconSelect',
  props: {
    innerValue: {
      type: String,
      default: ''
    },
    filterValue: {
      type: String,
      default: ''
    }
  },
  data() {
    return {
    }
  },
  computed: {
    iconData() {
      if (this.filterValue) {
        return allIcons.filter(item => item.includes(this.filterValue))
      }
      return allIcons
    },
    inputFilterValue: {
      get() {
        return this.filterValue
      },
      set(val) {
        this.$emit('set-filter-value', val)
        return val
      }
    }
  },
  created() {
  },
  methods: {
    selectIcon(iconName) {
      this.$emit('set-value', iconName)
      document.body.click()
    }
  }
}
</script>

<style rel="stylesheet/scss" lang="scss" scoped>
  .icon-body {
    width: 100%;
    padding: 10px;
    .icon-search {
      position: relative;
      margin-bottom: 5px;
    }
    .icon-list {
      height: 200px;
      overflow: auto;
      .list-container {
        display: flex;
        flex-wrap: wrap;
        .icon-item-wrapper {
          width: calc(100% / 3);
          height: 25px;
          line-height: 25px;
          cursor: pointer;
          display: flex;
          .icon-item {
            display: flex;
            max-width: 100%;
            height: 100%;
            padding: 0 5px;
            &:hover {
              background: #ececec;
              border-radius: 5px;
            }
            .icon {
              flex-shrink: 0;
            }
            span {
              display: inline-block;
              vertical-align: -0.15em;
              fill: currentColor;
              padding-left: 2px;
              overflow: hidden;
              text-overflow: ellipsis;
              white-space: nowrap;
            }
          }
          .icon-item.active {
            background: #ececec;
            border-radius: 5px;
          }
        }
      }
    }
  }
</style>
